"""
该模块用于处理RefWorks文件，添加年份字段并格式化内容。

主要功能包括：
1. 在A1字段后添加空格。
2. 从Excel文件中读取年份信息，并将其添加到RefWorks文件的相应记录中。
3. 格式化处理后的内容并输出到指定文件。

模块中的主要函数：
- add_space_after_a1: 在A1字段后添加空格。
- field_format: 格式化字段并添加年份信息。
- add_year_field: 添加年份字段到每个块中。
- main: 主函数，执行字段格式化和年份添加操作。
"""

import re
import pandas as pd
import openpyxl


def add_space_after_a1(content):
    """
    在A1字段后添加空格。

    参数:
        content (str): 需要处理的内容。

    返回值:
        str: 处理后的内容。
    """
    new_content = re.sub(r"(A1)(?!\s)", r"\1 ", content)
    return new_content


def field_format(xlsx_file_path, refworks_file_path, output_path):
    """
    格式化字段并添加年份信息。

    参数:
        xlsx_file_path (str): Excel文件路径。
        refworks_file_path (str): RefWorks文件路径。
        output_path (str): 输出文件路径。

    返回值:
        无

    异常:
        ValueError: 如果文件格式不支持。
    """
    # 确定文件扩展名
    file_extension = xlsx_file_path.split(".")[-1]

    # 根据文件扩展名选择适当的引擎
    if file_extension == "xlsx":
        df = pd.read_excel(xlsx_file_path, engine="openpyxl")
    elif file_extension == "xls":
        df = pd.read_excel(xlsx_file_path, engine="xlrd")
    else:
        raise ValueError("Unsupported file format")

    with open(refworks_file_path, "r", encoding="utf-8") as f:
        content = f.read()

    blocks = content.split("RT")

    new_content = add_year_field(blocks, df)

    new_content = add_space_after_a1(new_content)

    with open(output_path, "w", encoding="utf-8") as f:
        f.write(new_content)


def add_year_field(blocks, df):
    """
    添加年份字段到每个块中。

    参数:
        blocks (list): 文本块列表。
        df (DataFrame): 包含年份信息的DataFrame。

    返回值:
        str: 处理后的内容。
    """
    for i in range(len(blocks)):
        if "YR" not in blocks[i]:
            title_start = blocks[i].find("T1") + 3
            title_end = blocks[i].find("\n", title_start)
            title = blocks[i][title_start:title_end]
            match = df[df["Title-题名"] == title]
            if not match.empty:
                year = match.iloc[0]["PubTime-发表时间"]
                blocks[i] = (
                    blocks[i][:title_end] + "\nYR " + str(year) + blocks[i][title_end:]
                )

    new_content = "RT".join(blocks)
    return new_content


def main():
    """
    主函数，执行字段格式化和年份添加操作。
    """
    refworks_file = r"S:\Download\GoogleDownload\CNKI-20240817090756809.txt"
    xlsx_file = r"C:\Users\afkxw\Desktop\桌面文件夹\citespace_aigc共被引分析\数据集\CNKI-20240601-0817_327.xlsx"
    output_file = "CNKI-20240817090756809_with_year.txt"

    field_format(xlsx_file, refworks_file, output_file)


if __name__ == "__main__":
    main()
